package org.convallaria.system.biz.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.time.LocalDateTime;

/**
 * 用户和岗位关联表实体类
 * 
 * 功能特性：
 * - 支持用户和岗位的多对多关联关系
 * - 支持多租户数据隔离
 * - 支持软删除机制
 * - 支持数据审计追踪
 * - 支持关联关系管理
 * 
 * 业务说明：
 * - 用户岗位关联是组织架构管理的重要组件
 * - 一个用户可以担任多个岗位
 * - 一个岗位可以分配给多个用户
 * - 通过user_id和post_id建立关联关系
 * - 支持租户级别的数据隔离
 * - 支持软删除机制，便于数据恢复
 * 
 * 关联关系：
 * - 与用户表：多对一关系，通过user_id关联
 * - 与岗位表：多对一关系，通过post_id关联
 * - 与租户表：多对一关系，通过tenant_id关联
 * 
 * 数据约束：
 * - user_id：用户ID，必填，与post_id组成联合主键
 * - post_id：岗位ID，必填，与user_id组成联合主键
 * - tenant_id：租户ID，必填，用于多租户数据隔离
 * 
 * 注意：
 * - 此表为关联关系表，不继承BaseEntity
 * - 主键为联合主键(user_id, post_id)
 * - 支持软删除，通过del_flag字段控制
 * 
 * @author convallaria
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode
@TableName("sys_user_post")
public class SysUserPost {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     * 主键之一，必填字段
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 岗位ID
     * 主键之一，必填字段
     */
    @TableField("post_id")
    private Long postId;

    /**
     * 创建者
     * 记录创建此关联关系的用户
     */
    @TableField("create_by")
    private String createBy;

    /**
     * 创建时间
     * 记录创建时间
     */
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 删除标志
     * 0=正常，1=删除
     */
    @TableField("del_flag")
    private Integer delFlag;

    /**
     * 租户ID
     * 多租户数据隔离标识
     */
    @TableField("tenant_id")
    private Long tenantId;

    /**
     * 备注
     * 关联关系备注信息
     */
    @TableField("remark")
    private String remark;
}
